package com.tanhua.server.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.tanhua.common.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
@Slf4j
public class UserService {

    @Value("${tanhua.sso.url}")
    private String ssoUrl;//获取配置文件中登录系统的url路径

    @Autowired
    private RestTemplate restTemplate;


    private static final ObjectMapper MAPPER = new ObjectMapper();
    /**
     * 通过sso的rest接口查询
     * 验证token的方法在登录系统中,但登录系统并没有使用dubbo的架构,所以我们可以使用RestTemplate
     * @param token
     * @return
     */
    public User findUserByToken(String token) {
        String url = ssoUrl + "/user/" + token; //http://127.0.0.1/user/{token}
        try {
            //使用restTemplate调用sso系统的通过token获取user对象的接口方法
            String data = restTemplate.getForObject(url, String.class);
            if(StringUtils.isEmpty(data)){
                return null;
            }
            return MAPPER.readValue(data, User.class);
            //调用sso系统的方法用try...catch包裹,如果校验token出错则打印一条日志
        } catch (Exception e) {
            log.error("校验token出错，token = " + token, e);
        }
        return null;
    }
}
